#pragma once

#include "Singleton.h"
#include "ShmMgr.h"
#include "Iodp.h"

struct IodpModule
{
    int8_t iId;    // 模块ID
    CIodp *pIodp;  // 模块类实例指针
    char *pName;   // 模块名
    ShmNode *pShm; // 共享内存地址
    void *pHandle; // 动态链接库句柄
};

class CModMgr : public CSingleton<CModMgr>
{
    friend class CSingleton;

public:
    CModMgr();
    ~CModMgr();

public:
    bool Init();
    void Destroy();

    int8_t GetModuleId(char *pName);
    CIodp *GetIodp(int8_t iMod);

private:
    bool LoadModule(char *pDir);
    bool LoadIodp(const char *path, IodpModule *pModule);

private:
    IodpModule *m_pModule;
    uint8_t m_nModNum;
};
